﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.ComponentModel;

namespace PagSeguro.Mvc.Extensions
{
    public static class EnumExtensions
    {
        /// <summary>
        /// Retorna a descrição do Enum.
        /// </summary>
        /// <param name="valor">Valor do Enum.</param>
        /// <returns>
        /// Retorna a descrição contida em um atributo 'Descrition' caso o mesmo esteja com o atributo declarado.
        /// Se não retorna o próprio nome do valor do enumerador.
        /// </returns>
        public static string Descricao(this Enum valor)
        {
            if (valor == null)
                return String.Empty;

            FieldInfo fieldInfo = valor.GetType().GetField(valor.ToString());

            DescriptionAttribute[] atributos =
                (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);

            if (atributos == null || atributos.Length.Equals(0))
                return valor.ToString();

            var descricao = atributos[0];
            return (descricao.Description.Trim() == String.Empty) ? valor.ToString() : descricao.Description.Trim();
        }
    }
}
